iT邦幫忙

2022 iThome 鐵人賽

DAY 20
1
Security

做IT必備的資安觀念!手把手帶你攻防實戰系列 第 20

Day 20 : 實作篇 - OWASP Top10 (2021:A1) - Broken Access Control(無效的訪問控制)

  • 分享至 

  • xImage
  •  

小提醒:如果想跟著操作此篇,請先去以下網址進行安裝喔!
Day 11 : 實作篇 - Kali Linux VM虛擬機安裝教學
Day 12 : 實作篇 - Metasploitable2、OWASPBWA 靶機安裝教學

大家好,今天要來講 OWASP Top10 2021 的 A1 - Broken Access Control(無效的訪問控制)

演變

它在 2013 版其實是分開的,分別為A4 - 不安全的直接物件引用 (Insecure Direct Object References)A7 - 缺少功能級別的訪問控制 (Missing Function Level Access Control)

那之後為什麼會合併呢?
原因我在 Day 19 的 OWASP Top10 的比較篇裡一樣有提到

  • A4 和 A7 在 2017 被合併成A5 - 無效的訪問控制 (Broken Access Control),因為這兩個漏洞有著相同的根本原因,就是缺少訪問的控制權限,因此在 2017 直接將這個原因當成名字重新命名

它是什麼

Day 19 的 OWASP Top10 的比較篇裡,我們有稍微提到它是什麼東西

  • A5 - 無效的訪問控制 (Broken Access Control)
    這個最厲害了,它在 2021 從 A5 直接上升到 A1 的位置,因為系統權限如果控管不當,讓 hacker 操作到預期權限外的動作,就有可能導致機密資料遭到外洩、竄改、破壞等,因此它的排名上升到 A1,成為目前最關鍵的安全風險漏洞

所以它顧名思義,就是權限管控不當,導致 hacker 越權

它常見的漏洞有:

  • URL ID
  • 路徑遍歷
  • 文件權限

1. URL ID

不知道大家有沒有看過,有些 URL 後面會加上id=XXX,而這 ID 可能是一串數字、亂碼、雜湊值等,它指的可能是使用者 ID,也有可能是指某筆資料的 ID

ex:https://www.testweb.com/profile?id=1234      # 使用者
    https://www.testweb.com/profile?id=c14123-255d-8c1w-q82134te32      # 某筆資料

而 URL 在網址列是可以手動做更改的,所以如果沒做好權限的控制,hacker 就可以經由更改 ID,取得其他使用者的權限和資訊


2. 路徑遍歷

這個很吃對系統預設目錄的熟悉程度。如果沒有做好系統的權限控制,hacker 就能透過更改 URL,去自由訪問系統目錄中預設擺放的文件內容

ex:https://www.testweb.com/profile?file=dog.png
                  改成
    https://www.testweb.com/profile?file=../../etc/passwd

3. 文件權限

它跟剛剛的路徑遍歷有點類似,但又有點差異在。路徑遍歷是指:對「目錄」的權限,而這邊的文件權限是:對「文件」的權限

那為什麼會這樣分呢?

這就要提到 Linux 的權限了,簡單來說就是你可以訪問「這個目錄」,但不一定可以訪問「它目錄內的文件」,和它的權限-r有關
(這邊大家可以去看看我去年寫的鐵人賽,會比較清楚:Day 26 : Linux - 檔案or目錄的權限該怎麼看?又該如何做更改?


說明

那我們就使用「目錄遍歷」來進行示範

這裡我們要使用OWB靶機裡的OWASP Mutillidae II靶場進行練習,它提供了OWASP TOP10裡的漏洞,並分成三種安全等級,讓我們初學者可以循序漸進進行攻防練習

但這台OWB靶機只提供到 2013 的漏洞(好像有 2017 的但我沒找到下載點)

不過沒關係!剛剛有說,Broken Access Control(無效的訪問控制)在 2013 是被分開的,所以還是有辦法進行實戰練習

那我們就正式開始操作!


實際操作

首先,開啟你的kali VM,按左上角的「kali icon」,搜尋Burp Suite並開啟它
https://ithelp.ithome.com.tw/upload/images/20221010/20141088IzPZtbyuJo.png

這邊選「temporary project」即可(因為我們只是練習,不用儲存結果),再按「Next
https://ithelp.ithome.com.tw/upload/images/20221010/20141088zZLsQ0kPdP.png

選擇「Use Burp defaults」,再按「Start Burp
https://ithelp.ithome.com.tw/upload/images/20221010/20141088U0B3iUTbzE.png

就會看到 Burp Suite 的主畫面!
https://ithelp.ithome.com.tw/upload/images/20221011/20141088odfdHLVGj1.png

再到VirtualBox的 VM 列表,開啟我們的OWASPBWA靶機,登入後輸入ifconfig,確認它的 IP 位址為何(這裡每個人的 IP 位址皆不同,後續操作照你機器的 IP 即可)
https://ithelp.ithome.com.tw/upload/images/20221010/201410886xMdS3Rf4b.png

這時回到我們的kali VM,按左上角的「Firefox icon」,開啟 Firefox
https://ithelp.ithome.com.tw/upload/images/20221010/20141088B7Edwho8TG.png

在網址列的地方打上<你owb靶機的IP位址>,這裡我的 IP 位址為10.0.2.8
https://ithelp.ithome.com.tw/upload/images/20221010/20141088ix7DzV0lpN.png

到 owaspbwa 的畫面,點擊「OWASP Mutillidae II
https://ithelp.ithome.com.tw/upload/images/20221010/201410882c0Akk06OB.png

再點擊OWASP 2013 > A4 - Insecure Direct Object References > Text File Viewer
https://ithelp.ithome.com.tw/upload/images/20221010/20141088MtfAgw3JC5.png

設定 proxy

因為 Burp Suite proxy 預設的連接端口為127.0.0.1:8080,所以我們要在 Firefox 設定一個 proxy
https://ithelp.ithome.com.tw/upload/images/20221005/20141088CReo1LTmho.png

按右上角的「工具列 icon」,選擇「Settings(設定)
https://ithelp.ithome.com.tw/upload/images/20221005/20141088m6ccUuliO5.png

滑到最下面,看到「Network Settings」,點擊「Settings...
https://ithelp.ithome.com.tw/upload/images/20221005/20141088VOpyFJTL9O.png

勾選「Manual proxy configuration」,並在 HTTP Proxy 的地方輸入 127.0.0.1,port 號為8080
https://ithelp.ithome.com.tw/upload/images/20221005/20141088ENomvCdmbD.png

注意:如果你開啟 proxy 後,出現以下畫面,就回到剛剛設定 proxy 的畫面,將 proxy 關閉即可(在連接外網時一定要關閉 proxy,否則你會一直看到這個畫面),但在進行攔截的時候記得要再打開
https://ithelp.ithome.com.tw/upload/images/20221005/20141088pP6io1qpT2.png

https://ithelp.ithome.com.tw/upload/images/20221005/20141088fE7KBhxoPO.png

https://ithelp.ithome.com.tw/upload/images/20221005/20141088a3NqdW5Pf6.png

Firefox 的 Proxy 設定完成後,回到 Burp Suite 的畫面,將 proxy 的「Intercept is on」打開,進行封包攔截
https://ithelp.ithome.com.tw/upload/images/20221011/20141088rM4hMD2jA7.png

Security Level:0

再回到剛剛的Text File Viewer畫面
上面有說到,Mutillidae II提供了三種安全等級,讓我們初學者可以循序漸進進行攻防練習

所以這裡我們先測試Security Level: 0的情況,任選一個 File 後,按下「View File
https://ithelp.ithome.com.tw/upload/images/20221011/20141088WemjypV80y.png

這時 Burp Suite 會收到剛剛按下 View File 的封包,而瀏覽器的部分不會跳轉,會一直在「等待這個封包」
此時你會看到一串 URL,是你剛剛選擇的 File 的所在位置,因為它是用 textfile 來控制要顯示的文件
https://ithelp.ithome.com.tw/upload/images/20221010/20141088mAG0A8KCHh.png

我們將它改成../../etc/passwd,並點擊「Forward」進行封包傳送
(../../是指:「從家目錄退到 home,再退到根目錄」)
https://ithelp.ithome.com.tw/upload/images/20221011/20141088aRP3VlDEB3.png

再回到瀏覽器,你就會看到OWB靶機/etc/passwd內容
https://ithelp.ithome.com.tw/upload/images/20221010/20141088PGzne32qHk.png

你可以到OWB靶機輸入cat /etc/passwd,對照一下內容是不是一樣的
https://ithelp.ithome.com.tw/upload/images/20221011/20141088L5oxOnyHbh.png


Security Level:5

再來我們換測試Security Level:5的情況,首先先將 Proxy 的「Intercept is on」關閉
https://ithelp.ithome.com.tw/upload/images/20221011/20141088tIJrVMe6wF.png

再按兩次「Toggle Security」,將 Level 升至 5
https://ithelp.ithome.com.tw/upload/images/20221011/20141088g5seCaGnh5.png

再將 Proxy 的「Intercept is on」打開
https://ithelp.ithome.com.tw/upload/images/20221011/20141088HKfkUsLRfR.png

再回到剛剛的Text File Viewer畫面,任選一個 File 後,按下「View File
https://ithelp.ithome.com.tw/upload/images/20221011/201410881XhfQy47GR.png

這時 Burp Suite 就會收到封包,可以注意看它 textfile 的地方不是 URL 了,而是一個數字
https://ithelp.ithome.com.tw/upload/images/20221011/20141088PXe2ygB7cz.png

我們將它改成../../etc/passwd,並點擊「Forward」進行封包傳送
https://ithelp.ithome.com.tw/upload/images/20221011/20141088GpqGOPTrfr.png

回到瀏覽器,你會看到它報一段錯誤訊息,這是因為它有在程式碼裡做一些防禦機制
https://ithelp.ithome.com.tw/upload/images/20221011/201410889hDfMzB53P.png

看程式碼

那我們就來看看它程式碼寫了哪些內容

首先,先將 Proxy 的「Intercept is on」關閉
https://ithelp.ithome.com.tw/upload/images/20221011/201410885TYFouFKc9.png

在網址列的地方,可以看到Text File Viewer的 URL 後面寫著text-file-viewer.php。這邊先記好它,我們等等就是要看這個檔案的內容
https://ithelp.ithome.com.tw/upload/images/20221011/20141088dDWKl0GqK2.png

再點擊OWASP 2013 > A4 - Insecure Direct Object References > Source Viewer
https://ithelp.ithome.com.tw/upload/images/20221011/20141088GNp72fo8hb.png

Source File Name的地方選擇剛剛的text-file-viewer.php,並按下「View File」,就會看到這隻檔案的程式碼
https://ithelp.ithome.com.tw/upload/images/20221011/20141088tcTuNqsCxh.png

往下滑就會看到一個 switch,它是抓security-level的值去進行判斷的,再分別賦予變數不同的值
https://ithelp.ithome.com.tw/upload/images/20221011/20141088oMyZAjpNbC.png

再往下滑,會看到一個下拉式選單的 html 程式碼,裡面寫著 php 的 if-else,看我們在Text File Viewer的地方是選擇哪一個,它就會執行哪一行的 if-else,並看它的$lUseTokenization是否為TRUE,若為TRUE則echo 數字,不然就echo URL

這就是為什麼 Level 0 的時候它 textfile 為 URL,而 Level 5 的時候 textfile 為數字
https://ithelp.ithome.com.tw/upload/images/20221011/201410882RSzQdemXG.png

可以看到它這裡下拉式選單的選項有 5 個,所以它最多 echo 到 5
https://ithelp.ithome.com.tw/upload/images/20221011/2014108850mb7LkbhK.png

再往下滑,會看到一個用$pTextFile的值去進行判斷的 switch,它會根據 textfile 的值去給相對應的 URL
https://ithelp.ithome.com.tw/upload/images/20221011/20141088gW18EHfOky.png

再往下滑,這段就是在把內容印出來
https://ithelp.ithome.com.tw/upload/images/20221011/20141088h5TUEy1bAS.png


所以它是經由轉換再轉換,來達到防禦的效果
既然知道它程式碼的運作原理,你就能自己嘗試看看 Level 5 有什麼辦法可以破解它

以上就是今天的介紹
希望大家看完能對 Broken Access Control(無效的訪問控制) 更加了解


上一篇
Day 19 : 比較篇 - OWASP Top10 : 2013、2017、2021 的變動為何
下一篇
Day 21
系列文
做IT必備的資安觀念!手把手帶你攻防實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言